export default {
    namespaced: true,
    state: {
      // 购物车数组  获取本地存储中购物车数组
      cartList: uni.getStorageSync("cartList") || []
    },
    // 相当于 vuex中的计算属性！！！ 
    getters: {
      // 购物车的商品总数量
      cartCount(state) {
        let count = 0;
        state.cartList.forEach((goods) => {
          count += goods.num;
        });
        return count;
      },
      // 计算 当期全选按钮是否要选中  =   数组里面的商品 是否都是 checked=true
      // every!!!!!
      // every 会对数组做遍历！！ 
      // every 返回值 是 true 或者 false
      // 如果 every里面的回调函数 每一个都返回了true =>every 返回值 也是true 
      isAllChecked(state) {
        return state.cartList.length && state.cartList.every(goods => goods.checked);
      },
      // 获取 用户勾选了的商品 组成新的数组！！！  
      checkedCartList(state) {
        return state.cartList.filter(goods => goods.checked);
      },
  
      // 计算 要购买（checked=true）的商品的总数量 
      totalCount(state, getters) {
        let totalCount = 0;
        getters.checkedCartList.forEach(goods => totalCount += goods.num)
        return totalCount;
      },
      // 计算要购买（checked=true）总价格  
      totalPrice(state, getters) {
        let totalPrice = 0;
        getters.checkedCartList.forEach(goods => totalPrice += goods.num * goods.goods_price)
        return totalPrice;
      }
    },
    mutations: {
      // 添加商品
      // payload= {value:当前要添加的商品对象 }
      cartAdd(state, payload) {
        // 判断当前数据是否存在于数组中 
  
        const index = state.cartList.findIndex(goods => goods.goods_id === payload.value.goods_id);
        if (index === -1) {
          // 不存在  数组push 
          state.cartList.push({ ...payload.value, num: 1, checked: true });
        } else {
          // 存在 修改数组中元素的购买数量即可
          state.cartList[index].num++
        }
        // 存一份到缓存中
        uni.setStorageSync("cartList", state.cartList)
      },
      // 根据商品的id做切换选中
      cartToggleCheck(state, payload) {
        /* 
        1 根据商品的id 找到元素在数组中的位置 下标 index 
        2 数组[下标].checked = ! 数组[下标].checked;
        3 存一份到缓存中
         */
        const index = state.cartList.findIndex(goods => goods.goods_id === payload.value)
        state.cartList[index].checked = !state.cartList[index].checked;
        // 存一份到缓存中
        uni.setStorageSync("cartList", state.cartList)
  
      },
      // 根据商品的id 做数量的更新
      cartNumUpdate(state, payload) {
        // 1 根据商品的id 找到元素在数组中的位置 下标 index 
        const index = state.cartList.findIndex(goods => goods.goods_id === payload.value.goods_id)
        // 2 数组[下标].num+=-1
        state.cartList[index].num += payload.value.unit;
        // 存一份到缓存中
        uni.setStorageSync("cartList", state.cartList)
      },
      // 根据商品的id，删除数组中元素
      cartItemDelete(state, payload) {
        const index = state.cartList.findIndex(goods => goods.goods_id === payload.value)
        state.cartList.splice(index, 1);
        uni.setStorageSync("cartList", state.cartList)
      },
      // 根据当前全选状态 来设置 购物车元素中商品的选中状态
      cartAllToggle(state, payload) {
        // mutations 获取到 getters里面的属性
  
        // arguments 获取到 该方法的所有的形参  原生js就支持
        // console.log(payload.value);
  
        // 获取到取反后的 全选状态
        const isAllChecked = !payload.value;
        state.cartList.forEach(goods => goods.checked = isAllChecked);
        uni.setStorageSync("cartList", state.cartList)
  
      }
    },
    actions: {
  
    }
  }